#include <stdio.h>
#include <assert.h>

// 此代码是对strstr的模拟实现
// strstr函数的功能为: 以str1为目标,在str1里面寻找是否有和str2一样的字符段,如果有就返回地址,没有就返回NULL
// 利用这样,我们可以使用指针法来实现功能

const char* mystrstr (const char* str1 , const char* str2)
{

    assert (str1 && str2) ;

    const char* p1 = NULL ; // 这里创建两个指针,就是为了在寻找和比对字符串内容的时候用

    const char* p2 = NULL ;

    const char* ret = str1 ; // 这里这个指针变量是为了保存地址,方便在循环里面记录寻找了多少个字符还有坐标

    while (*ret) // 解引用,看字符串是否被找完
    {

        p1 = ret ; // 每次重新循环都是寻找失败,所以要从坐标处开始重新比对
        p2 = str2 ; // 从头开始比对

        while (*p1 != '\0' && *p2 != '\0' && *p1 == *p2) // 当字符相同继续向下一个字符比对,直到不满足任意一个条件跳出循环
        {   

            p1++ ;

            p2++ ;   

        }

        if (*p2 == '\0') // 当p2成功比对到'\0'的时候,即为比对成功,此时就可以跳出循环
        {

            return ret ; // 返回地址

        }

        ret++ ; // 每次比对失败地址就会变成从下一个字符开始
        
    }
    

}

int main ()
{

    char str1 [] = "abcdef" ;

    char str2 [] = "cde" ;

    const char* ret = mystrstr (str1 , str2) ;

    if (ret == NULL)
    {

        printf ("没找到\n") ;

    }

    else
    {

        printf ("%s\n" , ret) ;

    }

    return 0 ;

}